﻿//Auktionshus projekt, DM10X2, Anders Østergaard, Jesper Larsen og Mads Jakobsen, 19.9.2011

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using System.Threading;
using System.Net;

namespace Auktion
{
    public partial class FrmAuktionsServer : Form
    {
        StartServer minServer;
        ServerMonitor serverMon;
        AuktionsMonitor Aukmon;
        Thread ServerTråd;
        bool kører = false;
        string myIP = System.Net.Dns.GetHostByName(System.Net.Dns.GetHostName()).AddressList[0].ToString(); //findes vores IP
        

        public FrmAuktionsServer()
        {
            InitializeComponent();
            Aukmon = new AuktionsMonitor();
            serverMon = new ServerMonitor(Aukmon);
            minServer = new StartServer(47000, serverMon, Aukmon);
            Aukmon.TrådEvent += new AuktionsMonitor.TrådEventType(SeBudHistorik);
            serverMon.AntalByderEvent += new ServerMonitor.SeAntalBydere(LytPåKlientListe);
            btnStartServer.Enabled = false;
        }

        private void btnStartServer_Click(object sender, EventArgs e)
        {
            if (kører != true)
            {
                
                ServerTråd = new Thread(minServer.LavServer); //vi starter en servertråd til at håndtere vores klienter
                ServerTråd.Start();
                ServerTråd.IsBackground = true; //fortæller den skal kører i baggrunden
                kører = true;
                btnStartServer.Enabled = false;
                lblServerStatus.Text = "Serveren kører";
                lblIP.Text = myIP;
                
            }
            else
            {
                MessageBox.Show("Serveren er allerede startet!");
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            bool res;
            int mindstepris;
            string auktNavn = "";

            if (txtNavn.Text == "")
            {
                MessageBox.Show("Indtast venligst et navn på auktionen");
                txtNavn.Clear();
                txtNavn.Focus();
                return;
            }
            if (txtNavn.Text != null && txtNavn.Text.Count() >= 50)
            {
                MessageBox.Show("Beklager, navnet på auktionen er for langt!", "Fejl");
                txtNavn.Clear();
                txtNavn.Focus();
                return;
            }
            else
            {
                auktNavn = txtNavn.Text;
                txtNavn.Clear();
                txtAuktionsNavn.Text = auktNavn;
            }

            res = int.TryParse(txtPris.Text, out mindstepris);
            if (!res)
            {
                MessageBox.Show("Systemet håndterer desværrre kun pris som heltal.\r\nIndtast venligst pris igen.", "Fejl");
                txtPris.Clear();
                txtPris.Focus();
                return;
            }
            txtPris.Clear();
            txtAuktionMindstePris.Text = mindstepris.ToString();
            serverMon.SætAuktionsDetaljer(auktNavn, mindstepris);
            btnStartServer.Enabled = true;
        }


        public void SeBudHistorik(string bud, string ip)
        {
            if (this.InvokeRequired)// hvis kaldet kom fra GUI-tråd er invoke ikke nådvendig - fx. event pga. ændring i anden form
            {
                this.Invoke(new AuktionsMonitor.TrådEventType(SeBudHistorik), bud, ip);
            }
            else
            {
                
                try
                {
                        int højesteBud = Convert.ToInt32(bud);
                        txtAuktionHøjesteBud.Text = højesteBud.ToString();
                        txtAuktionVinder.Text = ip;
                        string budet = bud;
                        string Byder = ip;
                        txtHistorik.Text += budet + " fra " + Byder + "\r\n";
                        serverMon.BroadCastMessage(budet, Byder);
                }
                catch (Exception)
                {
                    string budet = bud;
                    string Byder = ip;
                    txtHistorik.Text += budet + " fra " + Byder + "\r\n";
                    serverMon.BroadCastMessage(budet, Byder);
                }
            }
        }

        public void LytPåKlientListe(int antal)
        {
            try
            {
                if (this.InvokeRequired)// hvis kaldet kom fra GUI-tråd er invoke ikke nådvendig - fx. event pga. ændring i anden form
                {
                    this.Invoke(new ServerMonitor.SeAntalBydere(LytPåKlientListe), antal);
                }
                else
                {
                    txtAntalTilmeldte.Text = antal.ToString();
                }
            }
            catch (Exception)
            {

                
            }

                

            
        }

        private void FrmAuktionsServer_FormClosing(object sender, FormClosingEventArgs e)
        {

            kører = false;
            minServer.StopSignal(); //lukker tråde med signalændring
            serverMon.StopSignal();//lukker tråde med signalændring
            Aukmon.StopSignal();//lukker tråde med signalændring
           // ServerTråd.Abort();
            //ServerTråd.Join();
            
            
        }
    
    }
}


